package main

import (
	"log"
	"os"

	"gopkg.in/macaron.v1"
)

// 1. 声明全局变量，在任何处理器中都能使用的
// log.New(out io.writer,prefix string,flag int)
// io.writer 表示任何可以写的对象都可以传进去
// prefix string 表示日志打印的默认前缀
// flag 可有可无，简单做法就是传递0，不存在任何意义

var logger = log.New(os.Stdout, "[APP] ", 0)

func main() {
	m := macaron.New() // 创建macaron实例

	// 2. Map()接收一个空接口，可以放入任意类型，比如放入logger对象,
	// 工作原理：取出传入对象的反射对象，放入对象池中，当需要使用时，再取出来这个反射对象转换为可以直接使用的类型
	m.Map(logger) // 映射，一般创建完成实例后就创建映射，也可以放在任何位置，m.Run()之前都可以

	// 注册路由
	// 3. 使用，将logger对象作为参数传入处理器
	m.Get("/", func(l *log.Logger) {
		l.Println("这是我的全局日志器")

	})
	m.Get("/123", func(l *log.Logger) string {
		l.Println("这是我的全局日志器")
		return "hello world"
	})
	m.Run() // 运行实例
}

// run: 前缀已经变为"[APP] ",浏览器访问时打印日志
// [APP] listening on 0.0.0.0:4000 (development)
// [APP] 这是我的全局日志器
// 默认是：[Macaron] listening on 0.0.0.0:4000 (development)[Macaron] listening on 0.0.0.0:4000 (development)
